package com.higgins.eventtracking.server;

import java.util.List;
import javax.jdo.Query;
import com.higgins.eventtracking.server.dataModel.SystemParameter;

public class IncomeSettingsDataService extends DataStoreService	{
	public void updateIncome(String income, String outgoing, String severableOutgoing)	{
		updateIncome(Double.parseDouble(income));
		updateOutgoing(Double.parseDouble(outgoing));
		updateSeverableOutgoing(Double.parseDouble(severableOutgoing));
	}
	public void updateSystemParameter(String item, String value)	{
		SystemParameter systemParameter = retrieveSystemParameterObject(item);
		systemParameter.setValue(value);
		updateSystemParameter(systemParameter);
	}
	private void updateIncome(Double income)	{
		SystemParameter systemParameter = retrieveIncomeParameter();
		systemParameter.setValue(income.toString());
		updateSystemParameter(systemParameter);
	}
	private void updateOutgoing(Double outgoing)	{
		SystemParameter systemParameter = retrieveOutgoingParameter();
		systemParameter.setValue(outgoing.toString());
		updateSystemParameter(systemParameter);
	}
	private void updateSeverableOutgoing(Double severableOutgoing)	{
		SystemParameter systemParameter = retrieveSeverableOutgoingParameter();
		systemParameter.setValue(severableOutgoing.toString());
		updateSystemParameter(systemParameter);
	}
	private SystemParameter retrieveIncomeParameter()	{
		return retrieveSystemParameterObject("income");
	}
	private SystemParameter retrieveOutgoingParameter()	{
		 return retrieveSystemParameterObject("outgoing");
	}
	private SystemParameter retrieveSeverableOutgoingParameter()	{
		 return retrieveSystemParameterObject("severableOutgoing");
	}
	public String retrieveIncome()	{
		return retrieveIncomeParameter().getValue();
	}
	public String retrieveOutgoing()	{
		return retrieveOutgoingParameter().getValue();
	}
	public String retrieveSeverableOutgoing()	{
		return retrieveSeverableOutgoingParameter().getValue();
	}
	public String retrieveSystemParameter(String systemParameter)	{
		return retrieveSystemParameterObject(systemParameter).getValue();
	}
	
	@SuppressWarnings("unchecked")
	private SystemParameter retrieveSystemParameterObject(String item)	{
		try	{
			Query query=pm.newQuery(SystemParameter.class);
			query.declareParameters("String itemParam");
			query.setFilter("item==itemParam");
			query.declareParameters("String itemParam");
			List<SystemParameter> results = (List<SystemParameter>)query.execute(item);
		return results.get(0);
		} catch (Exception e)	{
			SystemParameter systemParameter = new SystemParameter();
			systemParameter.setItem(item);
			return systemParameter;
		}
	}
	private void updateSystemParameter(SystemParameter systemParameter)	{
		pm.makePersistent(systemParameter);
	}
}
